#include <cstdio>
#include <algorithm>
#include <vector>
using namespace std;
int t,p,q;
int mp[9][9];
int ti;
bool vis[9][9];
int res_i[30];
int res_j[30];
int flag;
bool check(int i,int j){
    if(i<1 || i>q || j<1 || j>p || vis[i][j]){
        return false;
    }
    return true;
}
bool judge(int ti,int tj){
    for(int i=1;i<=q;i++){
        for(int j=1;j<=p;j++){
            if(!vis[i][j] && (ti!=i || tj!=j)){
                return false;
            }
        }
    }
    return true;
}
void dfs(int i,int j,int cnt){
    //printf("%d %d %d\n",i,j,cnt);
    if(judge(i,j)){
        for(int i=0;i<q*p;i++){
            printf("%c%d",res_i[i]-1+'A',res_j[i]);
        }
        flag=1;
        printf("\n");
        return;
    }
    else{
        if(vis[i][j]){
            return;
        }
        else{
            vis[i][j]=true;
            //printf("%d %d %d\n",i,j,check(i-2,j-1));
            if(check(i-2,j-1)){
                res_i[cnt]=i-2;
                res_j[cnt++]=j-1;
                dfs(i-2,j-1,cnt);
                vis[i-2][j-1]=false;
                cnt--;
                if(flag){
                    return;
                }
            }
            if(check(i-2,j+1)){
                res_i[cnt]=i-2;
                res_j[cnt++]=j+1;
                dfs(i-2,j+1,cnt);
                vis[i-2][j+1]=false;
                cnt--;
                if(flag){
                    return;
                }
            }
            if(check(i-1,j-2)){
                res_i[cnt]=i-1;
                res_j[cnt++]=j-2;
                dfs(i-1,j-2,cnt);
                vis[i-1][j-2]=false;
                cnt--;
                if(flag){
                    return;
                }
            }
            if(check(i-1,j+2)){
                res_i[cnt]=i-1;
                res_j[cnt++]=j+2;
                dfs(i-1,j+2,cnt);
                vis[i-1][j+2]=false;
                cnt--;
                if(flag){
                    return;
                }
            }
            if(check(i+1,j-2)){
                res_i[cnt]=i+1;
                res_j[cnt++]=j-2;
                dfs(i+1,j-2,cnt);
                vis[i+1][j-2]=false;
                cnt--;
                if(flag){
                    return;
                }
            }
            if(check(i+1,j+2)){
                res_i[cnt]=i+1;
                res_j[cnt++]=j+2;
                dfs(i+1,j+2,cnt);
                vis[i+1][j+2]=false;
                cnt--;
                if(flag){
                    return;
                }
            }
            if(check(i+2,j-1)){
                res_i[cnt]=i+2;
                res_j[cnt++]=j-1;
                dfs(i+2,j-1,cnt);
                vis[i+2][j-1]=false;
                cnt--;
                if(flag){
                    return;
                }
            }
            if(check(i+2,j+1)){
                res_i[cnt]=i+2;
                res_j[cnt++]=j+1;
                dfs(i+2,j+1,cnt);
                vis[i+2][j+1]=false;
                cnt--;
                if(flag){
                    return;
                }
            }
        }
    }
}
int main(void){
    //freopen("out.out","w",stdout);
    int c=1;
    scanf("%d",&t);
    while(t--){
        flag=0;
        scanf("%d%d",&p,&q);
        if(ti!=0){
            printf("\nScenario #%d:\n",c++);
            ti++;
        }
        else{
            printf("Scenario #%d:\n",c++);
            ti++;
        }
        //枚举起点
        for(int i=1;i<=q;i++){
            for(int j=1;j<=p;j++){
                res_i[0]=i;
                res_j[0]=j;
                dfs(i,j,1);
                vis[i][j]=false;
                if(flag){
                    break;
                }
            }
            if(flag){
                break;
            }
        }
        if(!flag){
            printf("impossible\n");
        }
    }
    return 0;
}
